

********************************************************;
**  Output Frequency Table for Jeff FFS-MA comparison **;
********************************************************;

options ls=100 ps=1000 nofmterr;

libname new '/data/Medicare_P01_2009/data/HEDIS/sasdata';


data a0; set new.hedis2009;

     if denom_flag=1;
     if state_code=' ' or state_code='00' or state_code>"53" or state_code in ("40","48") then delete;

     age = age+1;  /** reset Age to at the end of year for 2009 **/

     if age>=65;
   
     length plantypec $3;
     if plan_type in ('HMO','HMO/POS','HMO/POS Combined','POS') then plantypec='HMO';
     if plan_type = 'PPO' then plantypec='PPO';

     if plantypec in ('HMO','PPO');

     length newagec $ 8;

     if age=65            then newagec='1.65';
     if age>65 and age<70 then newagec='2.66-69';
     if age>69 and age<75 then newagec='3.70-74';
     if age>74 and age<80 then newagec='4.75-79';
     if age>79 and age<85 then newagec='5.80-84';
     if age>84            then newagec='6.85+';

     *** RTI Race Code ***;

     length rti_racec $ 10;

          if rti_race_cd='1' then rti_racec='1.White';
     else if rti_race_cd='2' then rti_racec='2.Black';
     else if rti_race_cd='3' then rti_racec='3.Other';
     else if rti_race_cd='4' then rti_racec='4.Asian';
     else if rti_race_cd='5' then rti_racec='5.Hispanic';
     else if rti_race_cd='6' then rti_racec='6.Native';
     else rti_racec='0.Unknown';

     if age>65 and totmonth<12 then delete; 

     death_dt=bene_death_dt;
     if (bene_valid_death_dt_sw='V' or death_dt>0) then death1=1; else death1=0;

     deathyear=year(death_dt);
     deathmon =month(death_dt);

     if death1=1 and
       (deathyear=2009 or
       (deathyear=2010 and (deathmon>0 and deathmon<3)))
     then delete ;


     ** Total 13 plans with <500 cases, and 2 of them have <30 cases **;

     if org_id in ( 'H0838', 'H1216', 'H3240', 'H4003', 'H4004',   
                    'H4006', 'H4012', 'H5577', 'H5732', 'H5774',    
                    'H5821', 'H5887', 'H8991' ) 
     then delete;   

     **-- Recode 9 or 999 to 0s --**;

     array rate bcs_d bcs_n cmc_d cmc_n1 cdc_d1 cdc_n1 cdc_d4 cdc_n4 cdc_d5 cdc_n5 gso_d gso_n;  
     do over rate; 
        if rate=9 then rate=0; 
     end;

     *-- cleaning BCS --*;

     if sex=1 or age>69 then bcs_d=.;
     if bcs_d =0 or bcs_d =. then bcs_n =.;

     *-- cleaning CMC and GSO --*;

     if cmc_d=0 then cmc_n1=.;
     if gso_d=0 then gso_n=.;

     *-- cleaning CDC ---*;

     if age>75 then do; cdc_d1=.; cdc_d4=.; cdc_d5=.; end;
     if cdc_d1=0 or cdc_d1=. then cdc_n1=.;
     if cdc_d4=0 or cdc_d4=. then cdc_n4=.;
     if cdc_d5=0 or cdc_d5=. then cdc_n5=.;

     *-- Clean up FSP variables --*;

        array fpsuti  fsp_n_cabg  fsp_n_ptca  fsp_n_cc      fsp_n_ce    fsp_n_rff   fsp_n_thr  fsp_n_tkr  fsp_n_peli
                      fsp_n_och   fsp_n_cch   fsp_n_ah      fsp_n_vh    fsp_n_pros  fsp_n_mast fsp_n_lump fsp_n_bs
                      ipu_t_acdi  ipu_t_acsdi ipu_t_acmedi  ipu_t_acdy  ipu_t_acsdy ipu_t_acmedy
                      amb_t_ov    amb_t_ed    amb_t_asp     amb_t_obsrd ;
        do over fpsuti;
           if fpsuti=999 then fpsuti=0;
        end;

        **-- Clean up Gender Related Miscoding - very low occurance --**;

        if sex=1 then do; fsp_n_ah=.; fsp_n_vh=.;  fsp_n_mast=.; fsp_n_lump=.; end;  /** female only**/
        if sex=2 then fsp_n_pros=.;   /** male only**/

 
       **-- CAP measures  John and Bruce email 6-4-2010 --**;

       if fsp_n_cabg>3 then fsp_n_cabg=3;   
       if fsp_n_ptca>4 then fsp_n_ptca=4;   
       if fsp_n_cc>4   then fsp_n_cc=4;   
     
       array fps2 fsp_n_ce   fsp_n_rff   fsp_n_thr   fsp_n_tkr   fsp_n_peli    fsp_n_och   fsp_n_cch  
                  fsp_n_ah   fsp_n_vh    fsp_n_pros  fsp_n_mast  fsp_n_lump    fsp_n_bs ;
       do over fps2; 
          if fps2>2 then fps2=2;  
       end;
 
       if ipu_t_acdi > 12 then ipu_t_acdi = 12 ;     * Total discharges set max 1 per month *;
       if ipu_t_acsdi > 12 then ipu_t_acsdi = 12 ;   * Surgery discharges *; 
       if ipu_t_acmedi > 12 then ipu_t_acmedi = 12 ; * Medical discharges *;

       if ipu_t_acdy > 365 then ipu_t_acdy = 365 ;  *Maximum possible in 12 months *;
       if ipu_t_acsdy > 365 then ipu_t_acsdy = 365 ;
       if ipu_t_acmedy > 365 then ipu_t_acmedy = 365 ;

       if amb_t_ov > 50 then amb_t_ov = 50;  * Set Total Outpatient Visits maximum 1 per week *;
       if amb_t_ed > 12 then amb_t_ed = 12;  * maximum 1 per month *;
       if amb_t_asp > 12 then amb_t_asp = 12;
       if amb_t_obsrd > 12 then amb_t_obsrd = 12;

 
     ********************************************************************;
     ** Rename All Variables and Will Keep Same Var Name for All Years **;
     ********************************************************************;

     cdc_d1 = cdc_d1;  label cdc_d1 = 'Denom for Diabetes: HbA1cTesting';
     cdc_d3 = cdc_d4;  label cdc_d3 = 'Denom for Diabetes: EyeExam';
     cdc_d4 = cdc_d5;  label cdc_d4 = 'Denom for Diabetes: LCL-C Screening';

     cdc_n1 = cdc_n1;  label cdc_n1 = 'Numer for Diabetes: HbA1cTesting';
     cdc_n3 = cdc_n4;  label cdc_n3 = 'Numer for Diabetes: EyeExam';
     cdc_n4 = cdc_n5;  label cdc_n4 = 'Numer for Diabetes: LCL-C Screening';

     n_cabg = fsp_n_cabg ; label n_cabg='CABG';
     n_ptca = fsp_n_ptca ; label n_ptca='PTCA';
     n_cc   = fsp_n_cc ;   label n_cc  ='CardiacCathetherization';
     n_ce   = fsp_n_ce ;   label n_ce  ='CardiacEnarterectomy';
     n_rff  = fsp_n_rff ;  label n_rff ='ReductionFemurFracture';
     n_thr  = fsp_n_thr ;  label n_thr ='TotalHipReplacement';
     n_tkr  = fsp_n_tkr ;  label n_tkr ='TotalKneereplacement';
     n_xli  = fsp_n_peli;  label n_xli ='ExcisionLargeIntest';
     n_oc   = fsp_n_och ;  label n_oc  ='OpenCholecystectomy';
     n_clc  = fsp_n_cch;   label n_clc ='ClosedCholecstectomy';
     n_ah   = fsp_n_ah ;   label n_ah  ='AbdominalHysterectomy';
     n_vh   = fsp_n_vh ;   label n_vh  ='VaginalHysterectomy';
     n_p    = fsp_n_pros;  label n_p   ='Prostatectomy';
     n_mast = fsp_n_mast;  label n_mast='Masterctomy' ;
     n_lump = fsp_n_lump;  label n_lump='Lumpectomy' ;
     n_bs   = fsp_n_bs;    label n_bs  ='BackSurgery';

     iptotdis   = ipu_t_acdi;   label iptotdis ='InpatTotalDischarges';
     ipsurdis   = ipu_t_acsdi;  label ipsurdis ='InpatSurgeryDischarges';
     ipmeddis   = ipu_t_acmedi; label ipmeddis ='InpatMedicineDischarges';

     iptotdays  = ipu_t_acdy;   label iptotdays ='InpatTotalDays';
     ipsurdays  = ipu_t_acsdy;  label ipsurdays ='InpatSurgeryDays';
     ipmeddays  = ipu_t_acmedy; label ipmeddays ='InpatMedicineDays';

     amb_opv =  amb_t_ov;    label amb_opv ='OutPatientVisits';
     amb_erv =  amb_t_ed;    label amb_erv ='EmergencyRoomVisits';
     amb_asp =  amb_t_asp;   label amb_asp ='AbmSugeryProcedures';
     amb_ors =  amb_t_obsrd; label amb_ors ='ObservationRoomStays';

     if n_mast>=1 then mast_any=1; else mast_any=0;
     if n_lump>=1 then lump_any=1; else lump_any=0;

     if lump_any=1 and n_mast=0 then lump_only=1; else lump_only=0;

          if mast_any=1 or lump_any=1 then any_mastlump=1;
     else if mast_any=0 and lump_any=0 then any_mastlump=0;


data a; set a0;

     %let vars = bcs_d bcs_n cmc_d cmc_n1 cdc_d1 cdc_d3 cdc_d4 cdc_n1 cdc_n3 cdc_n4 gso_d gso_n
                  n_cabg n_ptca n_cc n_ce n_rff n_thr n_tkr n_xli n_oc n_clc n_ah n_vh n_p n_mast n_lump n_bs
                  mast_any lump_any lump_only any_mastlump
                  iptotdis ipsurdis ipmeddis iptotdays ipsurdays ipmeddays amb_opv amb_erv amb_asp amb_ors m_months;

     proc means data=a n sum noprint nway;
          class newagec gender rti_racec state_code org_id bene_county_cd zip5 plantypec;
               var &vars;
               output out=allst0 n=  sum= /autoname;
 
     proc freq data=allst0; tables _type_ ;

  data new.hedis09hmoppo; set allst0;

         tot_n = _FREQ_ ;
         totmon = m_months_sum;

         drop _TYPE_ ;
         drop _FREQ_ ;
         drop m_months_sum;
         drop m_months_n ;

         proc contents data=new.hedis09hmoppo varnum;
              title 'Content of HEDIS09hmoppo';

         proc print data=new.hedis09hmoppo(obs=5);

endsas;

